Locale
模型,所有頁面通過 locale
外鍵字段與該模型關聯。translation_key
字段中的共享 UUID 記錄哪些頁面是彼此的翻譯。i18n_patterns
和 LocaleMiddleware
進行語言檢測。# mysite/settings/base.py
USE_I18N = True
USE_L10N = True
WAGTAIL_I18N_ENABLED = True
from django.utils.translation import gettext_lazy as _
LANGUAGE_CODE = 'en'
LANGUAGES = [
('en', _('English')),
('zh-hant', _('Traditional Chinese')),
]
WAGTAIL_CONTENT_LANGUAGES = LANGUAGES
有一個可選的語言區管理應用,允許 Wagtail 管理員從 Wagtail 管理介面中設置語言區。
要啟用此功能,將 wagtail.locales
添加到 INSTALLED_APPS
中:
# my_project/settings.py
INSTALLED_APPS = [
# ...
'wagtail.locales',
# ...
]
若要讓所有頁面樹在同一個網域下提供服務,我們需要為每個語言添加一個 URL 前綴。
可以使用 Django 內建的 i18n_patterns
函數來實現,該函數會為傳入的所有 URL 模式添加語言前綴。這樣會根據 URL 中指定的語言代碼激活相應的語言,而 Wagtail 在決定如何路由請求時會考慮這一點。
在專案的 urls.py
中,將 Wagtail 的核心 URL(以及任何你希望翻譯的其他 URL)添加到 i18n_patterns
區塊中:
from django.conf.urls.i18n import i18n_patterns
# 不需要 i18n 的 URL 模式
urlpatterns = [
path("django-admin/", admin.site.urls),
path("admin/", include(wagtailadmin_urls)),
path("documents/", include(wagtaildocs_urls)),
path("api/", include("api.urls")),
path("api/v2/", api_router.urls),
]
# 需要 i18n 的 URL 模式
urlpatterns += i18n_patterns(
path("search/", search_views.search, name="search"),
re_path(r"", include(wagtail_urls)),
prefix_default_language=True,
)
先進入和 manage.py 同一層,然後下
# 創造 locale folder
mkdir locale
在 settings/base.py 加上 LOCALE_PATH
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
在 terminal 下
django-admin makemessages -l zh_Hant
這時候,locale folder 會生出
django.po 檔案
在這裡面就可以對應不同的語系進行語言的翻譯
#: mysite/settings/base.py:142
msgid "English"
msgstr "English"
#: mysite/settings/base.py:143
msgid "Traditional Chinese"
msgstr "繁體中文"
#: mysite/templates/includes/header.html:3
msgid "Skip to content"
msgstr "跳過內容"
#: mysite/templates/includes/header.html:13
msgid "Search"
msgstr "搜尋"
更改完成後,指用指令 compilemessages
python manage.py compilemessages
如果你的 default 語言選擇繁體中文,那 admin panel 的界面,也會變成繁體中文